<?php
class APrestamoDeExternos {

	public function __construct() {
	}

	public function generarCuotas(EFacade & $facade) {
		$ezpdo_=getManager();
		$session=$facade->session;
		$docFC = & $facade->getDocumentRoot();
		$proveedor = &$docFC->proveedor;
		if(!($proveedor->cuenta)){
			$cuentaProveedor = $ezpdo_->create('MCuentaProveedor');
			$cuentaProveedor->proveedor = $proveedor;
		}
		else
			$cuentaProveedor = &$proveedor->cuenta;		
		/*********** PARA PODER TENER EL NUM DEL PRESTAMO Y PEGARSELO A LA CUOTA *******/
		$docFC->commit();
		$docFC->numero = $docFC->getDocumentNumber();
		/********************** CUENTAS A AFECTAR **********************/
		/********** INGRESO EL DINERO RECIBIDO DEL PRESTAMO ************/
		foreach($docFC->formasPagoList as $formaP){
			if($formaP->formaPago->cuentaBancaria)
				$cta = $formaP->formaPago->cuentaBancaria->cuentaContable;
			else
				$cta = $formaP->formaPago->cuentaCaja->cuentaContable;
			$cta->aumenta($formaP->montoPago,$docFC);
			/***************** Transacciones ***************************/
			$montoImpuesto = 0;
			$montoPagado = stringToNumber($formaP->montoPago);
			$totalPagado += $montoPagado;
			if ($cuentaCaja = & $formaP->formaPago->cuentaCaja != NULL) {
				$saldoCajaViejo = $cuentaCaja->saldo;
				$sql = 'FROM MTipoTransaccion as t where t.cuentaCaja.oid = ?';
				$transacciones = $ezpdo_->find($sql, $cuentaCaja->epGetObjectId());
				$tipoTransaccion = $transacciones[0];
				$montoAumento = 0;
				if ($porcentaje = $tipoTransaccion->porcentajeComision > 0) {
					$montoNuevo = $montoPagado * $porcentaje / 100;
					$montoImpuesto -= $montoNuevo;
					$transaccion = $session->create('MTransaccion');
					$fechaTransaccion = time();
					$montoTransaccion = $montoNuevo;
					$transaccion->esCaja = TRUE;
					$transaccion->fechaTransaccion = $fechaTransaccion;
					$transaccion->montoTransaccion = $montoTransaccion;
					$transaccion->haber = $montoTransaccion;
					$transaccion->saldoCuenta = $cuentaCaja->saldo;
					$descripcion = "Comision  " . $porcentaje . " %";
					$transaccion->descripcion = $descripcion;
					$transaccion->tipoTransaccion = $tipoTransaccion;
					$transaccion->cuentaCaja = $cuentaCaja;
					$transaccion->commit();
					$facade->session->evictAll('MTransaccion');
				}
				if ($porcentaje = $tipoTransaccion->montoComision > 0) {
					$montoImpuesto -= $porcentaje;
					$transaccion = $session->create('MTransaccion');
					$fechaTransaccion = time();
					$montoTransaccion = $porcentaje;
					$transaccion->esCaja = TRUE;
					$transaccion->fechaTransaccion = $fechaTransaccion;
					$transaccion->montoTransaccion = $montoTransaccion;
					$transaccion->haber = $montoTransaccion;
					$transaccion->saldoCuenta = $cuentaCaja->saldo;
					$descripcion = "Comision  " . $porcentaje . " BsF";
					$transaccion->descripcion = $descripcion;
					$transaccion->tipoTransaccion = $tipoTransaccion;
					$transaccion->cuentaCaja = $cuentaCaja;
					$transaccion->commit();
					$facade->session->evictAll('MTransaccion');
				}
				if ($porcentaje = $tipoTransaccion->porcentajeImpuesto > 0) {
					$montoNuevo = $montoPagado * $porcentaje / 100;
					$montoImpuesto -= $montoNuevo;
					$transaccion = $session->create('MTransaccion');
					$fechaTransaccion = time();
					$montoTransaccion = $montoNuevo;
					$transaccion->esCaja = TRUE;
					$transaccion->fechaTransaccion = $fechaTransaccion;
					$transaccion->montoTransaccion = $montoTransaccion;
					$transaccion->haber = $montoTransaccion;
					$transaccion->saldoCuenta = $cuentaCaja->saldo;
					$cuentaCaja->commit();
					$descripcion = "Impuesto " . $porcentaje . " %";
					$transaccion->descripcion = $descripcion;
					$transaccion->tipoTransaccion = $tipoTransaccion;
					$transaccion->cuentaCaja = $cuentaCaja;
					$transaccion->commit();
					$facade->session->evictAll('MTransaccion');
				}
				if ($porcentaje = $tipoTransaccion->montoImpuesto > 0) {
					$montoImpuesto -= $porcentaje;
					$transaccion = $session->create('MTransaccion');
					$fechaTransaccion = time();
					$montoTransaccion = $porcentaje;
					$transaccion->esCaja = TRUE;
					$transaccion->fechaTransaccion = $fechaTransaccion;
					$transaccion->montoTransaccion = $montoTransaccion;
					$transaccion->haber = $montoTransaccion;
					$transaccion->saldoCuenta = $cuentaCaja->saldo;
					$cuentaCaja->commit();
					$descripcion = "Impuesto " . $porcentaje . " BsF";
					$transaccion->descripcion = $descripcion;
					$transaccion->tipoTransaccion = $tipoTransaccion;
					$transaccion->cuentaCaja = $cuentaCaja;
					$transaccion->commit();
					$facade->session->evictAll('MTransaccion');
				}
				$transaccion = $session->create('MTransaccion');
				$fechaTransaccion = time();
				$montoTransaccion = $montoPagado + $montoImpuesto;
				$transaccion->esCaja = TRUE;
				$transaccion->fechaTransaccion = $fechaTransaccion;
				$transaccion->montoTransaccion = $montoTransaccion;
				$transaccion->debe = $montoTransaccion;
				$transaccion->saldoCuenta = $cuentaCaja->saldo;
				if (strlen($formaP->detalle) > 0)
					$detalle = $formaP->detalle;
				else
					$detalle = " con " . $formaP->formaPago->nombre . " " . $formaP->detalle;
				$descripcion = "Pago Prestamo " . $docFP->documento->numero . $detalle;
				$transaccion->descripcion = $descripcion;
				$transaccion->tipoTransaccion = $tipoTransaccion;
				$transaccion->cuentaCaja = $cuentaCaja;
				$transaccion->documento = $docFC;
				$saldoCajaNuevo = $saldoCajaViejo + $montoPagado + $montoImpuesto;
				$cuentaCaja->saldo = $saldoCajaNuevo;
				$transaccion->saldoCuenta = $cuentaCaja->saldo;
			} else {
				$cuentaCaja = & $formaP->formaPago->cuentaBancaria;
				$saldoCajaViejo = $cuentaCaja->saldo;
				$sql = 'FROM MTipoTransaccion as t where t.cuentaBancaria.oid = ?';
				$transacciones = $ezpdo_->find($sql, $cuentaCaja->epGetObjectId());
				$tipoTransaccion = $transacciones[0];
				$montoAumento = 0;
				if ($porcentaje = $tipoTransaccion->porcentajeComision > 0) {
					$montoNuevo = $montoPagado * $porcentaje / 100;
					$montoImpuesto -= $montoNuevo;
					$transaccion = $session->create('MTransaccion');
					$fechaTransaccion = time();
					$montoTransaccion = $montoNuevo;
					$transaccion->esBanco = TRUE;
					$transaccion->fechaTransaccion = $fechaTransaccion;
					$transaccion->montoTransaccion = $montoTransaccion;
					$transaccion->haber = $montoTransaccion;
					$descripcion = "Comision  " . $porcentaje . " %";
					$transaccion->descripcion = $descripcion;
					$transaccion->tipoTransaccion = $tipoTransaccion;
					$transaccion->cuentaCaja = $cuentaCaja;
					$transaccion->saldoCuenta = $cuentaCaja->saldo;
					$transaccion->commit();
					$facade->session->evictAll('MTransaccion');
				}
				if ($porcentaje = $tipoTransaccion->montoComision > 0) {
					$montoImpuesto -= $porcentaje;
					$transaccion = $session->create('MTransaccion');
					$fechaTransaccion = time();
					$montoTransaccion = $porcentaje;
					$transaccion->esBanco = TRUE;
					$transaccion->fechaTransaccion = $fechaTransaccion;
					$transaccion->montoTransaccion = $montoTransaccion;
					$transaccion->haber = $montoTransaccion;
					$transaccion->saldoCuenta = $cuentaCaja->saldo;
					$descripcion = "Comision  " . $porcentaje . " BsF";
					$transaccion->descripcion = $descripcion;
					$transaccion->tipoTransaccion = $tipoTransaccion;
					$transaccion->cuentaCaja = $cuentaCaja;
					$transaccion->commit();
					$facade->session->evictAll('MTransaccion');
				}
				if ($porcentaje = $tipoTransaccion->porcentajeImpuesto > 0) {
					$montoNuevo = $montoPagado * $porcentaje / 100;
					$montoImpuesto -= $montoNuevo;
					$transaccion = $session->create('MTransaccion');
					$fechaTransaccion = time();
					$montoTransaccion = $montoNuevo;
					$transaccion->esBanco = TRUE;
					$transaccion->fechaTransaccion = $fechaTransaccion;
					$transaccion->montoTransaccion = $montoTransaccion;
					$transaccion->haber = $montoTransaccion;
					$transaccion->saldoCuenta = $cuentaCaja->saldo;
					$descripcion = "Impuesto " . $porcentaje . " %";
					$transaccion->descripcion = $descripcion;
					$transaccion->tipoTransaccion = $tipoTransaccion;
					$transaccion->cuentaCaja = $cuentaCaja;
					$transaccion->commit();
					$facade->session->evictAll('MTransaccion');
				}
				if ($porcentaje = $tipoTransaccion->montoImpuesto > 0) {
					$montoImpuesto -= $porcentaje;
					$transaccion = $session->create('MTransaccion');
					$fechaTransaccion = time();
					$montoTransaccion = $porcentaje;
					$transaccion->esBanco = TRUE;
					$transaccion->fechaTransaccion = $fechaTransaccion;
					$transaccion->montoTransaccion = $montoTransaccion;
					$transaccion->haber = $montoTransaccion;
					$transaccion->saldoCuenta = $cuentaCaja->saldo;
					$descripcion = "Impuesto " . $porcentaje . " BsF";
					$transaccion->descripcion = $descripcion;
					$transaccion->tipoTransaccion = $tipoTransaccion;
					$transaccion->cuentaCaja = $cuentaCaja;
					$transaccion->commit();
					$facade->session->evictAll('MTransaccion');
				}
				$transaccion = $session->create('MTransaccion');
				$fechaTransaccion = time();
				$montoTransaccion = $montoPagado + $montoImpuesto;
				$transaccion->esBanco = TRUE;
				$transaccion->fechaTransaccion = $fechaTransaccion;
				$transaccion->montoTransaccion = $montoTransaccion;
				$transaccion->debe = $montoTransaccion;
				
				if (strlen($formaP->detalle) > 0)
					$detalle =$formaP->detalle;
				else
					$detalle = " con " . $formaP->formaPago->nombre . " " . $formaP->detalle;
				$descripcion = "Pago Prestamo " . $docFP->documento->numero . $detalle;
				$transaccion->descripcion = $descripcion;
				$transaccion->tipoTransaccion = $tipoTransaccion;
				$transaccion->cuentaBanco = $cuentaCaja;
				$transaccion->documento = $docFC;
				$saldoCajaNuevo = $saldoCajaViejo + $montoPagado + $montoImpuesto;
				$cuentaCaja->saldo = $saldoCajaNuevo;
				$transaccion->saldoCuenta = $cuentaCaja->saldo;
			}
			$transaccion->commit();
			$cuentaCaja->commit();			
		}
		/******************* Actualizo las cuentas por pagar *********************************/
		$cuentaPorPagar = $docFC->cuentas[$docFC->cuentaAfectar];
		$cuentaPorPagar->aumenta($docFC->montoTotal,$docFC,null,null);
		$cuentaPorPagar->commit();
		/***************************************************************/ 
		$numero = 0;
		$plazos= $docFC->plazos;		
		for($i=1;$i<=$plazos;$i++){			
			$montoGiroCuota = $docFC->montoTotal / $docFC->plazos;
			$numero++;
			$fechaVencimiento = $docFC->fecha + $numero*3600*24*30;

			 	$cuota=$session->create('MCuotaProveedor');
				$cuota->fechaVencimiento = $fechaVencimiento;
				$cuota->montoCuota = $montoGiroCuota;
				$cuota->status = FALSE;
				$cuota->prestamoDeExterno = $docFC;
				$cuota->proveedor = $docFC->proveedor;
				$cuota->refFactura = $docFC->numero." - ".$docFC->conceptoPrestamo." - Cuota ".$numero."/".$docFC->plazos." - vence: ".dateToString($fechaVencimiento);
				$cuota->commit();
			 	/******************* Actualizo la cuenta proveedor *************************************/
			 	$cuentaProveedor->saldo -= $montoGiroCuota;
			 	$cuentaProveedor->cuotasProveedor[] = $cuota;
			 	
				//se crea la clase ke lleva el historico del saldo y documento que afecto la cta proveedor... carlos
				
				$historico = $session->create('MListaHistoricoCuentas');
				$historico->fecha = date('U');
				$historico->saldo = $cuentaProveedor->saldo;
				
				$historico->referencia = $cuota->refFactura;
				$cuentaProveedor->historico[] = $historico;		
				$historico->commit();
			 	$cuentaProveedor->commit();
			 	/*************************************************************************************/					
		}		
		$workflowFC = & $docFC->getWorkflowRef();
		$facade->session->refresh($workflowFC);
		$transSetFC = & EFacade :: getCurrentTransSetAuto($workflowFC, /* AGENT */	2);
		$transFC = & $transSetFC->getTransByName('t2');
		$user=NULL;
		$facade->fireTrans($transFC, $user, 'Generar Cuota', FALSE);
		$workflowFC->epSetDirty(TRUE); 
		$docFC->epSetDirty(TRUE);
		$facade->saveWorkflow();	
	}
	
	public function culminar(EFacade & $facade) {
		$ezpdo_=getManager();
		$session=$facade->session;
		$docFC = & $facade->getDocumentRoot();
		$termino = true;
		//echo "<hr>hola";
		$ezpdo_->evictAll('MCuotaProveedor');
		foreach($docFC->cuotaProveedor as $cuo){
			//echo "<hr>cuo ",$cuo;
			if(!$cuo->status){
				//echo "<br>cuo: ",$cuo;
				$termino = false;
				break;
			}
		}
		$wf = $docFC->workflowRef;
		$transet = & EFacade :: getCurrentTransSetAuto($wf, /* AGENT */2);
		//echo "<hr>termino: ",$termino;
		if($termino)
			$trans = & $transet->getTransByName('t4');
		else
			$trans = & $transet->getTransByName('t5');
		$user = NULL;
		//echo "<hr>trans: ",$trans;
		$facade->fireTrans($trans, $user, 'Agente', FALSE);	
		$facade->saveWorkflow();	
	}
}
?>